"""
函数封装步骤：
1、功能代码写出来
2、def封装
3、参数化： 变化的数据定义为形参
4、返回值： 判断函数是否有数据需要给调用的人使用
   - 存在环境变量里 不需要返回值

封装的函数的优化：
1、记录日志： 方便问题定位 看到执行过程 == 但凡print看结果 或者debug看结果的地方都记录日志
2、因为有些用例可能没有在用例没有头部 参数 读取为空
 - 如果没有提取表达式 读出来的就是None  不能做反序列化。

"""
import json

import allure

from tools.handle_mysql import HandleMysql
from data.my_db import my_db
from data.envi_data import EnviData
from loguru import logger

@allure.step("前置sql操作")
def pre_sql(sql_data):
    if sql_data is None:
        return
    logger.info("---------------前置SQL处理开始-----------------------")
    # 第二步： 做反序列化操作，转化为字典
    sql_data= json.loads(sql_data)
    logger.info(f"前置sql提取表达式是：{sql_data}")
    # 第三步： for循环k v 得到这个变量和sql语句
    for k,v in sql_data.items(): # k是变量名mobile_code，v是sql语句
        # 第四步： sql去数据库里查，调用我们之前封装的sql的类方法 得到数据查询结果
        sql_result = HandleMysql(**my_db).query_data(v) # 调用数据库封装类的实例方法 结果 字典{'mobile_code': '402864'}
        # 第五步： 查完后结果存储在环境变量作为属性。属性名就是k 变量名；
        for i,j in sql_result.items(): # i - mobile_code属性名,j-402864 是属性值
            setattr(EnviData,i,j)
    logger.info(f"结果设置为环境变量属性为：{EnviData.__dict__}")

if __name__ == '__main__':
    sql_data = """{"mobile_code":
    "select mobile_code  from tz_sms_log where user_phone='13422337768' order by rec_date desc limit 1;"}"""
    pre_sql(sql_data)
